package com.yc.jpa.dao;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.Repository;

import com.yc.entity.Student;

/**
 * 继承Repository
 * @author yc
 *
 */
public interface StudentPepositoryDao extends Repository<Student, Integer> {

	/**
	 * 新增数据<p>
	 * 固定这么写，别想把save改成其他名字，框架还没智能到可以猜你的心思；<p>
	 * 返回值就是插入的对象（改成其他类型，虽然不影响插入数据，但会报格式转换错误）
	 * @param stu
	 * @return
	 */
	Student save(Student stu);
	
	/**
	 * 批量新增数据<p>
	 * 固定写法，不要把参数改成其他类型，如List<Student>也是会报错的
	 * @param stuList
	 * @return
	 */
	Iterable<Student> save(Iterable<Student> stuList);
	
	/**
	 * 根据id删除对象<p>
	 * 删除接口没有返回值
	 * @param id
	 */
	void delete(Integer id);
	
	/**
	 * 根据对象删除对象
	 * @param stu
	 */
	void delete(Student stu);
	
	/**
	 * 批量删除<p>
	 * 还是固定写法，不要把参数改成其他类型，如List<Student>也是会报错的
	 * @param stuList
	 */
	void delete(Iterable<Student> stuList);
	
	//错误写法
//	void deleteByName(String name);
	
	/**
	 * 查询并排序
	 * @param sort
	 * @return
	 */
	List<Student> findAll(Sort sort);
	
	/**
	 * 分页查询
	 * @param pageable
	 * @return
	 */
	Page<Student> findAll(Pageable pageable);
	
	/**
	 * 普通分页查询
	 * @param pageable
	 * @return
	 */
	Page<Student> findByName(String name, Pageable pageable);
	
}
